/**
 * 1-- Game Start
 *     1.1-- Easy
 *     1.2-- Normal
 *     1.3-- Panic
 *           1.X.1-- Sunny Milk
 *           1.X.2-- Luna Child
 *           1.X.3-- Star Sapphire
 * 2-- Practice
 *     2.1-- Easy
 *     2.2-- Normal
 *     2.3-- Panic
 *           2.X.1-- Sunny Milk
 *           2.X.2-- Luna Child
 *           2.X.3-- Star Sapphire
 *                   2.X.X.1-- 1
 *                   2.X.X.2-- 2
 *                   2.X.X.3-- 3
 *                   2.X.X.4-- EX
 * 3-- Result
 *     3,1-- Sunny Milk
 *     3,2-- Luna Child
 *     3,3-- Star Sapphire
 * 4-- Config
 *     4-1-- BackGround
 *     4-2-- Effect
 *     4-3-- Data Clear
 *           4-3-1 Realy? Yes
 *           4-3-2 Realy? No
 * 5-- Exit
 */

/**
 * ^Cg
 */
task Title(){
	//J[\őړl
	let MaxCursorX = 0;
	let MaxCursorY = 0;
	
	//݂̃J[\W
	let NowCursorX = 0;
	let NowCursorY = 0;
	
	//Փx
	//  1:Easy
	//  2:Normal
	//  3:Panic
	let Difficult = 0;
	
	//vC[
	//  1:Tj[
	//  2:i`
	//  3:X^[
	let Player = 0;
	
	//Xe[W
	//  0:{(ʂ)
	//  1:1
	//  2:2
	//  3:3
	//  4:EX
	let Stage = 0;
	
	//BGMĐ
	ChangeBGM( "", bgmTitle );
	
	//Xe[g؂ւ
	State = State_Title;
	
	//j[pőJ[\l
	MaxCursorX = 0;
	MaxCursorY = 4;
	
	//bZ[WJE^
	let messageCount = 0;
	
	//
	let Exp_Start = "Xe[WJn܂";
	let Exp_Practice = "Cӂ1Xe[Ŵ݂vC邱Ƃł܂";
	let Exp_Result = "Ug\܂";
	let Exp_Config = "RtBOʂJ܂";
	let Exp_Exit = "Q[I܂";
	
	let Exp_Player  = "@IĂ";
	let Exp_Difficult = "ՓxIĂ";
	let Exp_Stage = "Xe[WIĂ";
	let Exp_StageCantPlay = "IXe[W͌iKł͑Is\ł";
	
	let Exp_Config_Switch_1 = "wi̕`L؂ւ܂";
	let Exp_Config_Switch_2 = "ڍׂȃGtFNg̕`L؂ւ܂";
	
	let Exp_Config_Delete_1 = "Z[uf[^RtBOf[^폜܂";
	let Exp_Config_Delete_2 = "{ɍ폜Ă낵łH";
	
	//e햼Oԗpf[^
	let players = [ "Sunny", "Luna", "Star" ];
	let difficults = [ "Easy", "Normal", "Panic" ];
	let stages = [ "1", "2", "3", "4" ];
	
	//^Cg̊Ԓ[v
	while( State == State_Title ){
		//݂̃J[\ʒu擾
		alternative( Cursor_Depth )
			case( 0 ){
				NowCursorX = Cursor1_X;
				NowCursorY = Cursor1_Y;
			}
			case( 1 ){
				NowCursorX = Cursor2_X;
				NowCursorY = Cursor2_Y;
			}
			case( 2 ){
				NowCursorX = Cursor3_X;
				NowCursorY = Cursor3_Y;
			}
			case( 3 ){
				NowCursorX = Cursor4_X;
				NowCursorY = Cursor4_Y;
			}
		
		//Ug͐p̃L[`FbNs
		if( ResultMode != 0 ){
			ResultKeyCheck();
		}
		
		//L[`FbN
		if( GetKeyState( VK_SHOT ) == KEY_PUSH ){
			//݂̃J[\ʒu擾
			alternative( Cursor_Depth )
				case( 0 ){
					alternative( Cursor1_Y )
						case( 0 ){
							//1.X ՓxI({)
							//J[\ݒ
							NowCursorX = 0;
							NowCursorY = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth += 1;
						}
						case( 1 ){
							//2.X ՓxI(vNeBX)
							//J[\ݒ
							NowCursorX = 0;
							NowCursorY = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth += 1;
						}
						case( 2 ){
							//3.X Ug
							//J[\ݒ
							NowCursorX = 0;
							NowCursorY = 0;
							MaxCursorX = 0;
							MaxCursorY = 0;
							Cursor_Depth += 1;
							//Ug[h˓
							ResultMode = 1;
						}
						case( 3 ){
							//4.X RtBO
							//J[\ݒ
							NowCursorX = 0;
							NowCursorY = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth += 1;
						}
						case( 4 ){
							//5 Q[I
							ClearStage();
						}
				}
				case( 1 ){
					alternative( Cursor1_Y )
						case( 0 ){
							//1.X.X LN^[I({)
							//Փxw
							Difficult = NowCursorY + 1;
							//J[\ݒ
							NowCursorX = 0;
							NowCursorY = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth += 1;
						}
						case( 1 ){
							//2.X.X LN^[I(vNeBX)
							//Փxw
							Difficult = NowCursorY + 1;
							//J[\ݒ
							NowCursorX = 0;
							NowCursorY = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth += 1;
						}
						case( 3 ){
							//4.X RtBO
							alternative( Cursor2_Y )
								case( 0 ){
									//4.1 wi`L
									SetIsDrawBackGround( !GetIsDrawBackGround() );
								}
								case( 1 ){
									//4.2 o`L
									SetIsDrawEffect( !GetIsDrawEffect() );
								}
								case( 2 ){
									//4.3 f[^
									//J[\ݒ
									NowCursorX = 0;
									NowCursorY = 1;
									MaxCursorX = 0;
									MaxCursorY = 1;
									Cursor_Depth += 1;
								}
						}
				}
				case( 2 ){
					alternative( Cursor1_Y )
						case( 0 ){
							//1.X.X {ҊJn
							//vC[w
							Player = NowCursorY + 1;
							//Xe[Ww
							Stage = 0;
							
							//Q[Jn
							StageStart( Difficult, Player, Stage );
						}
						case( 1 ){
							//2.X.X Xe[WI(vNeBX)
							//vC[w
							Player = NowCursorY + 1;
							//J[\ݒ
							NowCursorX = 0;
							NowCursorY = 0;
							MaxCursorX = 0;
							MaxCursorY = 3;
							Cursor_Depth += 1;
						}
						case( 3 ){
							//4.X RtBO
							alternative( Cursor2_Y )
								case( 2 ){
									//4.3.X f[^
									alternative( Cursor3_Y )
										case( 0 ){
											//4.3.1 OK
											//Z[uf[^
											ClearSaveData();
										}
										case( 1 ){
											//4.3.2 NG
											//1Oɖ߂
											//J[\ݒ
											NowCursorX = 0;
											NowCursorY = 2;
											Cursor3_X = 0;
											Cursor3_Y = 0;
											MaxCursorX = 0;
											MaxCursorY = 2;
											Cursor_Depth -= 1;
										}
								}
						}
				}
				case( 3 ){
					alternative( Cursor1_Y )
						case( 1 ){
							//2.X.X vNeBXJn
							let isPlayableStage = false;
							let ns = players[ Player - 1 ] ~ "PlayNum" ~ difficults[ Difficult - 1 ] ~ stages[ NowCursorY ];
							let playNum = GetCommonDataDefaultEx( "OFT_Save", ns, 0 );
							if( playNum > 0 ){
								isPlayableStage = true;
							}
							
							if (isPlayableStage) {
								//Xe[Ww
								Stage = NowCursorY + 1;
								
								//Q[Jn
								StageStart( Difficult, Player, Stage );
							} else {
								PlaySE(seBuzzer);
								messageCount = 180;
							}
						}
				}
		}else if( GetKeyState( VK_BOMB ) == KEY_PUSH ){
			//݂̃J[\ʒu擾
			alternative( Cursor_Depth )
				case( 0 ){
					//ExitɈړ
					NowCursorY = 4;
				}
				case( 1 ){
					//gbv֖߂
					//J[\ݒ
					NowCursorX = Cursor1_X;
					NowCursorY = Cursor1_Y;
					Cursor2_X = 0;
					Cursor2_Y = 0;
					MaxCursorX = 0;
					MaxCursorY = 4;
					Cursor_Depth -= 1;
					//Ug[h
					ResultMode = 0;
					ShowPlayerIndex = 0;
					ShowDifficultIndex = 0;
				}
				case( 2 ){
					alternative( Cursor1_Y )
						case( 0 ){
							//1.X.X vC[I({)
							//1.X   ՓxI({) ֖߂
							//J[\ݒ
							NowCursorX = Cursor2_X;
							NowCursorY = Cursor2_Y;
							Cursor3_X = 0;
							Cursor3_Y = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth -= 1;
						}
						case( 1 ){
							//2.X.X vC[I(vNeBX)
							//2.X   ՓxI(vNeBX) ֖߂
							//J[\ݒ
							NowCursorX = Cursor2_X;
							NowCursorY = Cursor2_Y;
							Cursor3_X = 0;
							Cursor3_Y = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth -= 1;
						}
						case( 3 ){
							alternative( Cursor2_Y )
								case( 2 ){
									//4.3.X f[^mF
									//4.X   RtBO ֖߂
									//J[\ݒ
									NowCursorX = Cursor2_X;
									NowCursorY = Cursor2_Y;
									Cursor3_X = 0;
									Cursor3_Y = 2;
									MaxCursorX = 0;
									MaxCursorY = 2;
									Cursor_Depth -= 1;
								}
						}
				}
				case( 3 ){
					alternative( Cursor1_Y )
						case( 1 ){
							//2.X.X.X Xe[WI(vNeBX)
							//2.X.X   vC[I(vNeBX) ֖߂
							//J[\ݒ
							NowCursorX = Cursor3_X;
							NowCursorY = Cursor3_Y;
							Cursor4_X = 0;
							Cursor4_Y = 0;
							MaxCursorX = 0;
							MaxCursorY = 2;
							Cursor_Depth -= 1;
						}
				}
		}else if( GetKeyState( VK_UP ) == KEY_PUSH ){
			//
			if( MaxCursorY != 0 ){
				NowCursorY -= 1;
				if( NowCursorY < 0 ){
					NowCursorY = MaxCursorY;
				}
			}
		}else if( GetKeyState( VK_DOWN ) == KEY_PUSH ){
			//
			if( MaxCursorY != 0 ){
				NowCursorY += 1;
				if( NowCursorY > MaxCursorY ){
					NowCursorY = 0;
				}
			}
		}else if( GetKeyState( VK_LEFT ) == KEY_PUSH ){
			//
			if( MaxCursorX != 0 ){
				NowCursorX -= 1;
				if( NowCursorX < 0 ){
					NowCursorX = MaxCursorX;
				}
			}
		}else if( GetKeyState( VK_RIGHT ) == KEY_PUSH ){
			//E
			if( MaxCursorX != 0 ){
				NowCursorX += 1;
				if( NowCursorX > MaxCursorX ){
					NowCursorX = 0;
				}
			}
		}
		
		//쎎Ŏdl
		alternative( Cursor1_Y )
			case( 0, 1 ){
				//{ҁAvNeBX
				alternative( Cursor_Depth )
					case( 1 ){
						NowCursorY = 2;
					}
					case( 2 ){
						NowCursorY = 0;
					}
			}
		
		//݂̃J[\ʒuݒ
		alternative( Cursor_Depth )
			case( 0 ){
				Cursor1_X = NowCursorX;
				Cursor1_Y = NowCursorY;
			}
			case( 1 ){
				Cursor2_X = NowCursorX;
				Cursor2_Y = NowCursorY;
			}
			case( 2 ){
				Cursor3_X = NowCursorX;
				Cursor3_Y = NowCursorY;
			}
			case( 3 ){
				Cursor4_X = NowCursorX;
				Cursor4_Y = NowCursorY;
			}
		
		//Zbg
		alternative( Cursor1_Y )
			case( 0 ){
				//1.X {
				alternative( Cursor_Depth )
					case( 0 ){
						Menu_Exp = Exp_Start;
					}
					case( 1 ){
						Menu_Exp = Exp_Difficult;
					}
					case( 2 ){
						Menu_Exp = Exp_Player;
					}
			}
			case( 1 ){
				//2.X vNeBX
				alternative( Cursor_Depth )
					case( 0 ){
						Menu_Exp = Exp_Practice;
					}
					case( 1 ){
						Menu_Exp = Exp_Difficult;
					}
					case( 2 ){
						Menu_Exp = Exp_Player;
					}
					case( 3 ){
						if (messageCount > 0) {
							Menu_Exp = Exp_StageCantPlay;
							messageCount -= 1;
						} else {
							Menu_Exp = Exp_Stage;
						}
					}
			}
			case( 2 ){
				//3.X Ug
				alternative( Cursor_Depth )
					case( 0 ){
						Menu_Exp = Exp_Result;
					}
					case( 1 ){
						Menu_Exp = "";
					}
			}
			case( 3 ){
				//4.X RtBO
				alternative( Cursor_Depth )
					case( 0 ){
						Menu_Exp = Exp_Config;
					}
					others{
						alternative( Cursor2_Y )
							case( 0 ){
								Menu_Exp = Exp_Config_Switch_1;
							}
							case( 1 ){
								Menu_Exp = Exp_Config_Switch_2;
							}
							case( 2 ){
								alternative( Cursor_Depth )
									case( 1 ){
										Menu_Exp = Exp_Config_Delete_1;
									}
									case( 2 ){
										Menu_Exp = Exp_Config_Delete_2;
									}
							}
					}
			}
			case( 4 ){
				//5.X I
				Menu_Exp = Exp_Exit;
			}
		
		yield;
	}
}

/**
 * ^Cg̕`
 */
function TitleDraw(){
	//
	DrawText( Menu_Exp, 40, 360, 14, 255 );
	
	if( Cursor_Depth >= 0 ){
		//1Kw
		
		if( Cursor_Depth == 1 && Cursor1_Y == 2 ){
			//Ug
			ResultDraw();
		}else{
			//UgʈȊO͒ʏ̃j[\
			
			//Game Start
			DrawText( "Game Start", 60, 30 + 30 * 0, 20, 255 );
			//Practice
			DrawText( "Practice", 60, 30 + 30 * 1, 20, 255 );
			//Result
			DrawText( "Result", 60, 30 + 30 * 2, 20, 255 );
			//Config
			DrawText( "Config", 60, 30 + 30 * 3, 20, 255 );
			//Exit
			DrawText( "Exit", 60, 30 + 30 * 4, 20, 255 );
			//1KwJ[\
			DrawText( "", 34, 30 + 30 * Cursor1_Y, 20, 255 );
		}
	}
	if( Cursor_Depth >= 1 ){
		//2Kw
		
		alternative( Cursor1_Y )
			case( 0, 1 ){
				//1.X ՓxI({)
				//2.X ՓxI(vNeBX)
				
				//Easy
				DrawText( "Easy", 220, 30 + 30 * 0, 20, 255 );
				//Normal
				DrawText( "Normal", 220, 30 + 30 * 1, 20, 255 );
				//Panic
				DrawText( "Panic", 220, 30 + 30 * 2, 20, 255 );
				//2KwJ[\
				DrawText( "", 194, 30 + 30 * Cursor2_Y, 20, 255 );
			}
			case( 3 ){
				//4.X RtBO
				
				//BackGround
				DrawText( "BackGround", 220, 30 + 30 * 0, 20, 255 );
				
				//ON^OFF
				if( GetIsDrawBackGround() ){
					DrawText( "ON", 360, 30 + 30 * 0, 20, 255 );
				}else{
					DrawText( "OFF",360, 30 + 30 * 0, 20, 255 );
				}
				
				//Clear Data
				DrawText( "Effect",     220, 30 + 30 * 1, 20, 255 );
				
				//ON^OFF
				if( GetIsDrawEffect() ){
					DrawText( "ON", 360, 30 + 30 * 1, 20, 255 );
				}else{
					DrawText( "OFF",360, 30 + 30 * 1, 20, 255 );
				}
				
				//Clear Data
				DrawText( "Clear Data", 220, 30 + 30 * 2, 20, 255 );
				//2KwJ[\
				DrawText( "", 194, 30 + 30 * Cursor2_Y, 20, 255 );
			}
	}
	if( Cursor_Depth >= 2 ){
		//3Kw
		
		alternative( Cursor1_Y )
			case( 0, 1 ){
				//1.X.X vC[I({)
				//2.X.X vC[I(vNeBX)
				
				//Sunny Milk
				DrawText( "Sunny Milk",    220, 130 + 30 * 0, 20, 255 );
				//Luna Child
				DrawText( "Luna Child",    220, 130 + 30 * 1, 20, 255 );
				//Star Sapphire
				DrawText( "Star Sapphire", 220, 130 + 30 * 2, 20, 255 );
				//3KwJ[\
				DrawText( "",            194, 130 + 30 * Cursor3_Y, 20, 255 );
			}
			case( 3 ){
				//4.X RtBO
				
				//Realy Delete?
				DrawText( "Realy Delete?", 240, 120 + 30 * 0, 20, 255 );
				//Yes
				DrawText( "Yes",           270, 120 + 30 * 1, 20, 255 );
				//No
				DrawText( "No",            270, 120 + 30 * 2, 20, 255 );
				//3KwJ[\
				DrawText( "",            244, 120 + 30 * (Cursor3_Y + 1), 20, 255 );
			}
	}
	if( Cursor_Depth >= 3 ){
		//4Kw
		alternative( Cursor1_Y )
			case( 1 ){
				//2.X.X.X Xe[WI(vNeBX)
				
				//1
				DrawText( "Stage 1",  280, 240 + 30 * 0, 20, 255 );
				//2
				DrawText( "Stage 2",  280, 240 + 30 * 1, 20, 255 );
				//3
				DrawText( "Stage 3",  280, 240 + 30 * 2, 20, 255 );
				//EX
				DrawText( "Stage EX", 280, 240 + 30 * 3, 20, 255 );
				//4KwJ[\
				DrawText( "",         254, 240 + 30 * Cursor4_Y, 20, 255 );
			}
	}
}
